const { Controller } = require('egg')

class ProductController extends Controller {
  // 获得产品列表
  async getProductList() {
    const { ctx, app } = this
    const res = await app.model.Product.findAll({
      where: {
        status: 1
      }
    })
    ctx.apiSuccess(res)
  }
  // 获得产品详情
  async getProductDetail() {
    const { ctx, app } = this
    ctx.validate({
      id: {
        type: 'int',
        required: true,
        desc: '产品id'
      }
    })
    const { id } = ctx.request.query
    let res = await app.model.ProductDetail.findOne({
      where: {
        id
      }
    })
    if (!res) {
      ctx.throw(404, '对于id的产品信息不存在')
    }
    res = JSON.parse(JSON.stringify(res))
    res.content = JSON.parse(res.content)
    ctx.apiSuccess(res)
  }

  // 获得产品列表和产品详情 admin
  async getProductListAndDetail() {
    const { ctx, app } = this
    let res = await app.model.Product.findAll({
      where: {
        status: 1
      },
      include: [
        {
          model: app.model.ProductDetail
        }
      ]
    })
    if (!res) return ctx.apiFail('产品列表为空')
    res = JSON.parse(JSON.stringify(res))
    res.forEach((item) => {
      item.product_detail.content = JSON.parse(item.product_detail.content)
    })
    ctx.apiSuccess(res)
  }

  // 新增产品 admin
  async addProduct() {
    const { ctx, app } = this
    ctx.validate({
      title: {
        type: 'string',
        required: true,
        desc: '产品标题'
      },
      gitee_url: {
        type: 'string',
        required: true,
        desc: '产品gitee地址'
      },
      type: {
        type: 'string',
        required: true,
        desc: '产品下载类型'
      },
      poster: {
        type: 'string',
        required: true,
        desc: '产品poster'
      },
      product_detail: {
        type: 'string',
        required: true,
        desc: '产品详情'
      }
    })
    const { title, gitee_url, type, poster, product_detail } = ctx.request.body
    // 创建产品信息
    let product = await app.model.Product.create({
      title,
      gitee_url,
      type,
      poster,
      status: 1
    })
    if (!product) return ctx.apiFail('创建产品失败')
    // 创建产品详情
    const detail = JSON.parse(product_detail)
    const productDetail = await app.model.ProductDetail.create({
      id: product.id,
      product_id: product.id,
      title: detail.title,
      desc: detail.desc,
      content: JSON.stringify(detail.content)
    })
    if (!productDetail) {
      product.destroy()
      return ctx.apiFail('创建产品详情失败')
    }
    product = JSON.parse(JSON.stringify(product))
    product.product_detail = JSON.parse(JSON.stringify(productDetail))
    product.product_detail.content = JSON.parse(product.product_detail.content)
    ctx.apiSuccess(product)
  }

  // 删除产品信息
  async deleteProduct() {
    const { ctx, app } = this
    ctx.validate({
      id: {
        type: 'int',
        required: true,
        desc: '产品id'
      }
    })
    const { id } = ctx.request.query
    const product = await app.model.Product.findByPk(id)
    if (!product) return ctx.apiFail('产品不存在')
    const res = await product.destroy()
    if (!res) return ctx.apiFail('删除产品失败')
    const detail = await app.model.ProductDetail.findByPk(id)
    let res2 = ''
    if (detail) {
      res2 = await detail.destroy()
      if (!res2) return ctx.apiFail('删除产品详情失败')
    }
    ctx.apiSuccess('删除成功')
  }

  // 修改产品信息
  async updateProduct() {
    const { ctx, app } = this
    ctx.validate({
      title: {
        type: 'string',
        required: true,
        desc: '产品标题'
      },
      gitee_url: {
        type: 'string',
        required: true,
        desc: '产品gitee地址'
      },
      type: {
        type: 'string',
        required: true,
        desc: '产品下载类型'
      },
      poster: {
        type: 'string',
        required: true,
        desc: '产品poster'
      },
      product_detail: {
        type: 'string',
        required: true,
        desc: '产品详情'
      },
      id: {
        type: 'int',
        required: true,
        desc: '产品id'
      }
    })
    const { title, gitee_url, type, poster, product_detail, id } = ctx.request.body
    console.log(title, gitee_url, type, poster, product_detail, id, '------------')
    const product = await app.model.Product.findByPk(id)
    if (!product) return ctx.apiFail('产品不存在')
    const res = await product.update({
      title,
      gitee_url,
      type,
      poster
    })
    if (!res) return ctx.apiFail('修改产品失败')
    const detail = await app.model.ProductDetail.findByPk(id)
    if (!detail) return ctx.apiFail('产品详情不存在')
    const res2 = await detail.update({
      title: JSON.parse(product_detail).title,
      desc: JSON.parse(product_detail).desc,
      content: JSON.stringify(JSON.parse(product_detail).content)
    })
    if (!res2) return ctx.apiFail('修改产品详情失败')
    ctx.apiSuccess('修改成功')
  }
}

module.exports = ProductController
